#include "myinfo.h"

// 检查用户名是否合法（长度限制）
bool MyInfo::isUsernameValid(const string& username) {
    return username.length() > 0 && username.length() <= 16; // 限制1~16个字符
}

// 检查密码是否合法（不能包含特殊字符）
bool MyInfo::isPasswordValid(const string& password) {
    regex pattern("^[a-zA-Z0-9]{6,18}$"); // 仅限6-18位字母或数字
    return regex_match(password, pattern);
}

// 读取用户数据
json MyInfo::loadUserData() {
    ifstream inFile(dataFile);
    json userData;
    if (inFile) {
        inFile >> userData;
    }
    inFile.close();
    return userData;
}

// 保存用户数据
void MyInfo::saveUserData(const json& userData) {
    ofstream outFile(dataFile);
    outFile << userData.dump(4); // 格式化输出
    outFile.close();
}

// 用户注册
bool MyInfo::registerUser(const string& username, const string& password, const string& confirmPassword) {
    if (!isUsernameValid(username)) {
        cout << "注册失败：用户名过长 (最大16字符)\n";
        return false;
    }
    if (!isPasswordValid(password)) {
        cout << "注册失败：密码不符合要求 - 仅限6-18位字母或数字\n";
        return false;
    }
    if (password != confirmPassword) {
        cout << "注册失败：两次输入的密码不匹配\n";
        return false;
    }

    json users = loadUserData();
    if (users.contains(username)) {
        cout << "注册失败：用户名已被占用\n";
        return false;
    }

    users[username] = { {"password", password} };
    saveUserData(users);

    cout << "注册成功！\n";
    return true;
}

// 用户登录
bool MyInfo::loginUser(const string& username, const string& password) {
    json users = loadUserData();
    if (users.contains(username) && users[username]["password"] == password) {
        cout << "登录成功！\n";
        return true;
    } else {
        cout << "登录失败：用户名或密码错误\n";
        return false;
    }
}



